{{#jackson}}
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
{{/jackson}}

/**
 * {{^description}}Gets or Sets {{{name}}}{{/description}}{{#description}}{{description}}{{/description}}
 */
{{#additionalEnumTypeAnnotations}}
{{{.}}}
{{/additionalEnumTypeAnnotations}}{{#useBeanValidation}}@Introspected
{{/useBeanValidation}}public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} {
    {{#allowableValues}}
        {{#enumVars}}
            {{#enumDescription}}
  /**
   * {{enumDescription}}
   */
            {{/enumDescription}}
            {{#withXml}}
  @XmlEnumValue({{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}}{{{value}}}{{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}})
            {{/withXml}}
  {{{name}}}({{{value}}}){{^-last}},{{/-last}}{{#-last}};{{/-last}}
        {{/enumVars}}
    {{/allowableValues}}

  private {{{dataType}}} value;

  {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}({{{dataType}}} value) {
    this.value = value;
  }

    {{#jackson}}
  @JsonValue
    {{/jackson}}
  public {{{dataType}}} getValue() {
    return value;
  }

  @Override
  public String toString() {
    return String.valueOf(value);
  }

    {{#jackson}}
  @JsonCreator
    {{/jackson}}
  public static {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} fromValue({{{dataType}}} value) {
    for ({{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} b : {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}.values()) {
      if (b.value.equals(value)) {
        return b;
      }
    }
    {{#isNullable}}
    return null;
    {{/isNullable}}
    {{^isNullable}}
    throw new IllegalArgumentException("Unexpected value '" + value + "'");
    {{/isNullable}}
  }
}
